﻿using System.Windows.Forms;
using UtfprLibrary.Windows.Forms.Exceptions;
using System;

namespace UtfprLibrary.Windows.Forms.Helpers {
    /// <summary>
    /// Classe reponsável por abrigar os métodos de suporte ao formulário de Login.
    /// Serve como uma ponte entre o formulário de Login e o restante das classes do projeto.
    /// </summary>
    internal static class UtfprLoginHelper {
        /// <summary>
        /// Método responsável por validar se o campo recebido por parametro
        /// está preenchido. Caso estiver, 
        /// o retorno é TRUE, caso contrário, FALSE.
        /// </summary>
        /// <param name="campo">Parametro da classe string a ser validado pelo método.</param>
        /// <returns>Se o campo for válido, o retorno é TRUE, caso contrário, FALSE.</returns>
        internal static bool ValidateField(string campo) {
            try {
                if (campo.Trim().Length == 0 || campo.Contains("'")) {
                    return false;
                } else {
                    return true;
                }
            } catch (Exception ex) {
                throw new UtfprWFCoreHelpersException("", ex);
            }
        }

        /// <summary>
        /// Método responsável por validar se o controle utilizado para receber a SENHA da tela de Login
        /// é da classe MaskedTextBox. Caso não satisfazer essa condição, a exceção UTFPRLoginException 
        /// é lançada. Esse método valida também se os campos USUARIO e SENHA foram preenchidos corretamente. 
        /// Caso não estiverem sido, é ativado um alerta de ERRORPROVIDER no controle inválido e o retorno 
        /// do método é FALSE. Caso estiver tudo certo, o retorno é TRUE. 
        /// </summary>
        /// <param name="error">Parametro da classe ErrorProvider utilizado para exibir alertas de erro 
        /// caso algum controle recebido pelo método for inválido.</param>
        /// <param name="user">Parametro da classe Control utilizado pela tela de Login para 
        /// receber o LOGIN do USUARIO.</param>
        /// <param name="password">Parametro da classe Control utilizado pela tela de Login para 
        /// receber a SENHA do USUARIO</param>
        /// <returns>Caso os controles foram preenchidos corretamente, o retorno é TRUE. Caso contrário,
        /// o retorno é FALSE.</returns>
        /// <exception cref="UTFPRLoginException">Essa exceção é lançada caso o controle utilizado
        /// pela tela de Login para receber a SENHA do USUARIO não for da classe MaskedTextBox.</exception>
        internal static bool ValidateFields(ErrorProvider error, Control user, Control password) {
            try {
                bool result = true;

                if (!ValidateField(user.Text)) {
                    error.SetError(user, "User required.");
                    result = false;
                } else {
                    error.SetError(user, string.Empty);
                }

                if (!ValidateField(password.Text)) {
                    error.SetError(password, "Password required.");
                    result = false;
                } else {
                    error.SetError(password, string.Empty);
                }

                return result;
            } catch (Exception ex) {
                throw new UtfprWFCoreHelpersException("", ex);
            }
        }
    }
}
